home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / ibm / ashc5.arc / FFWD.C < prev    next >
Text File  |  1990-07-15  |  2KB  |  97 lines

  1. /*
  2.  *      file I/O version of forward ref handler
  3.  */
  4.  
  5. #define    FILEMODE    0644    /* file creat mode */
  6. #define    UPDATE        2    /* file open mode */
  7. #define    ABS        0    /* absolute seek */
  8.  
  9. int    Forward =0;        /* temp file's file descriptor    */
  10. char    Fwd_name[] = { "Fwd_refs" } ;
  11.  
  12. /*
  13.  *      fwdinit --- initialize forward ref file
  14.  */
  15. fwdinit()
  16. {
  17.     Forward = creat(Fwd_name,FILEMODE);
  18.     if(Forward <0)
  19.         fatal("Can't create temp file");
  20.     close(Forward); /* close and reopen for reads and writes */
  21.     Forward = open(Fwd_name,UPDATE);
  22.     if(Forward <0)
  23.         fatal("Forward ref file has gone.");
  24. }
  25.  
  26. /*
  27.  *      fwdreinit --- reinitialize forward ref file
  28.  */
  29. fwdreinit()
  30. {
  31.     int stat;
  32.     long lstat;
  33.  
  34.     F_ref   = 0;
  35.     Ffn     = 0;
  36.     lstat = lseek(Forward,0L,ABS);   /* rewind forward refs */
  37.     if( lstat == (long)ERR ) fatal("Unable to read forward ref file");
  38.     stat = read(Forward,&Ffn,sizeof(Ffn));
  39.     if( stat == ERR ) fatal("Unable to read forward ref file");
  40.     stat = read(Forward,&F_ref,sizeof(F_ref)); /* read first forward ref into mem */
  41.     if( stat == ERR ) fatal ("Unable to read forward ref file");
  42. #ifdef DEBUG
  43.     printf("First fwd ref: %d,%d\n",Ffn,F_ref);
  44. #endif
  45. }
  46.  
  47. /*
  48.  *      fwdmark --- mark current file/line as containing a forward ref
  49.  */
  50. fwdmark()
  51. {
  52.     int stat;
  53.  
  54.     stat = write(Forward,&Cfn,sizeof(Cfn));
  55.     if( stat == ERR ) fatal("Unable to write to forward ref file");
  56.     stat = write(Forward,&Line_num,sizeof(Line_num));
  57.     if( stat == ERR ) fatal("Unable to write to forward ref file");
  58. }
  59.  
  60. /*
  61.  *      fwdnext --- get next forward ref
  62.  */
  63. fwdnext()
  64. {
  65.     int stat;
  66.  
  67.     stat = read(Forward,&Ffn,sizeof(Ffn));
  68.     if( stat == ERR ) fatal("Unable to read forward ref file");
  69. #ifdef DEBUG
  70.     printf("Ffn stat=%d ",stat);
  71. #endif
  72.     stat = read(Forward,&F_ref,sizeof(F_ref));
  73.     if( stat < sizeof(F_ref) ){
  74.         if( stat == ERR ) fatal("Unable to read forward ref file");
  75.         F_ref=0;
  76.         Ffn=0;
  77.         }
  78. #ifdef DEBUG
  79.     printf("F_ref stat=%d  ",stat);
  80.     printf("Next Fwd ref: %d,%d\n",Ffn,F_ref);
  81. #endif
  82. }
  83.  
  84. /*
  85.  *  fwd_done --- closes & deletes forward reference file
  86.  */
  87. fwd_done()
  88. {
  89.     int stat;
  90.  
  91.     stat = close(Forward); /* Have to close first on MS-DOS or you leave lost clusters. */
  92. #ifndef DEBUG
  93.     if( stat == 0 )        /* If close was successful, delete file */
  94.         unlink(Fwd_name);
  95. #endif
  96. }
  97.